Chapter 1 PCの仕組みからアセンブラ入門まで
Chapter 1 PCの仕組みからアセンブラ入門まで 本に書いてあるとおりにバイナリを手打ちする
この本は色々説明した後に「というのをやっておきました」というような説明スタイルなので説明を上からやっていくと愚直に全部やることになる
バイナリをQEMUでブートする(Linuxだと本文そのままでは動かないので直接QEMUを使った) https://gyazo.com/c67e778d585a17bc9d9be241939ca278
Winでもやってみた
https://gyazo.com/af2ab182463f4b014c7eafbb049fb85a
なんか動いた。なにこれ?
10進数は2進数に変換できる
16進数
ペンがあれば小説が書ける。バイナリエディタがあればプログラムが書ける……書きやすいとはいってない!
..¥z_tools¥nask.exe helloos.nas helloos.img
asm.batでこれが動く
書籍では、次の手順になる
1. NASKでアセンブラをassembleしてimage作成
2. RUNでqemuをつかってimageを実行
しかし、macOSでやっていると、このタイミングではNASKが動かないのでNASMを使う brew install nasm
NASM version 2.14.02 compiled on Sep 28 2019
code:helloos1
nasm helloos.nas -o helloos.img
まとめると、macOSでは次の手順になる(Linuxでもこうなるはず)
1. NASMでアセンブラをassembleしてimage作成
nasm helloos.nas -o helloos.img
2. qemu-system-i386でimageを実行
qemu-system-i386 helloos.img
アセンブラの基礎
data byte。1 byteだけ直接書く
DB "HELLOIPL"のように文字列を指定することも可能
data word
アセンブラの世界では1 wordは16bit
アーキテクチャによる。MIPSでは1 wordは32bitkadoyau.icon data double-word
32bit
reserve byte。そのバイトだけ予約する。
NASKでは予約部は0x00で埋められる
どこに読み込むか
$が読み込まれる予定のメモリ番地になる
Cのgoto
ADD SI, 1はSI = SI + 1
CMP AL,0はif(AL == 0)
JMPの一種
CMPの比較が等しければジャンプする
halt
CPUを待機状態にする
なにもしないならHLTをしておく
無限ループでCPU負荷が上がってしまうのを防ぐ
helloos2/helloos.nasはSJIS
UTF-8で化ける
hello-osはこれを採用
最初のセクタのこと。PCはこれを読んで起動に必要な情報があるか確認する
FDでは1セクタ512 byte。2280セクタ
initial program loader
ブートセクタにOSを読み込むプログラム